package com.huang.factory;

/**
 * 工厂方法模式；创建多个工厂，每个工厂生产自己的产品
 * 优点：各个工厂生产自己的产品，新增产品不影响开闭原则
 * 缺点：代码复杂度增加
 *
 */
public class FactoryMethod {

    public static void main(String[] args) {
        Product a = new ProductAFactory().getProduct();
        Product b = new ProductBFactory().getProduct();

        a.print();
        b.print();
    }
}

/**
 * 工厂抽象类
 * 将工厂也抽象出来，抽象出工厂共有的特性，比如生产产品
 */
interface ProductFactory {
    Product getProduct();
}

/**
 * A工厂的实现类
 * A工厂生产产品，只生产A产品
 */
class ProductAFactory implements ProductFactory {


    @Override
    public Product getProduct() {
        return new ProductA();
    }
}

/**
 * B工厂的实现类
 * B工厂生产产品，只生产B产品
 */
class ProductBFactory implements ProductFactory {

    @Override
    public Product getProduct() {
        return new ProductB();
    }
}


